import Vue from 'vue'
import Router from 'vue-router'

Vue.use(Router)

/* Layout */
import Layout from '@/layout'

import departments from './modules/departments'
import setting from './modules/settings'
import employees from './modules/employees'
import permissions from './modules/permissions'
// import attendances from './modules/attendances'
// import salarys from './modules/salarys'
// import approvals from './modules/approvals'
// import social from './modules/social_securitys'

// asyncRoutes动态路由,相当于一种权限
// 可以看做校长,班主任,老师,游客
// 校长可以查看50个页面,所有的页面权限都有
// 游客只能查看一些官网,首页,购买页面,只能看三个页面

// 我之前写项目,会尽量保证 每个文件内容的长度在 200-300行以内
// 在之前写路由的时候,对路由进行了封装 --- 我之前搭建项目的时候,在给
// 为了防止后面文件体积过大,都是讲 一个个路由配置 单独放在一个新建的文件夹里
export const asyncRoutes = [
  departments,
  setting,
  employees,
  permissions
  // attendances,
  // salarys,
  // approvals,
  // social
]

// constantRoutes静态路由,不需要登录就可以访问,可以看见的路由,比如常见的首页,登录,注册,404等页面
// 我之前玩过一些阿里云,腾讯云,买过一些域名啥的,控制台里面所有的页面 都需要登录过后才能访问---对于这些域名,我们在项目里一般把它叫做动态路由
export const constantRoutes = [
  {
    path: '/login',
    component: () => import('@/views/login/index'),
    hidden: true
  },

  {
    path: '/404',
    component: () => import('@/views/404'),
    hidden: true
  },

  {
    path: '/',
    component: Layout,
    redirect: '/dashboard',
    children: [{
      path: 'dashboard',
      name: 'Dashboard',
      component: () => import('@/views/dashboard/index'),
      meta: { title: 'Dashboard', icon: 'dashboard' }
    }]
  },

  // 404 page must be placed at the end !!!
  { path: '*', redirect: '/404', hidden: true }
]

// 合并两个数组的方法
// es6 展开运算符 ...    -----------你用过es6哪些新特性,哪些新语法
// Object.assign ---是对象
// arr.concat(arr2)
// arr.concat(...arr2)  -----这个arr1才是新数组,push的参数是一个个数字,返回值是新数组的长度
// forEach filter map find every some
// arr.forEach(function(item,index,arr){})

const createRouter = () => new Router({
  // mode: 'history', // require service support
  scrollBehavior: () => ({ y: 0 }),
  routes: [...constantRoutes, ...asyncRoutes]
})

const router = createRouter()

// Detail see: https://github.com/vuejs/vue-router/issues/1234#issuecomment-357941465
export function resetRouter() {
  const newRouter = createRouter()
  router.matcher = newRouter.matcher // reset router
}

export default router
